import { _decorator, Component, ProgressBar, Label, assetManager, Prefab, SpriteFrame, AudioClip } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('Loader')
export class Loader extends Component {
    @property(ProgressBar) // 进度条组件
    progressBar: ProgressBar | null = null;

    @property(Label) // 加载百分比文本
    progressLabel: Label | null = null;

    @property([String]) // 需要加载的资源路径列表
    resourcesToLoad: string[] = [];

    private totalResources: number = 0; // 总资源数量
    private loadedResources: number = 0; // 已加载资源数量

    protected onLoad() {
        this.startLoading();
    }

    // 开始加载资源
    private startLoading() {
        this.totalResources = this.resourcesToLoad.length;
        this.loadedResources = 0;
        console.log( this.resourcesToLoad);
        if (this.totalResources === 0) {
            console.log('没有需要加载的资源');
            this.onLoadingComplete();
            return;
        }
        // 遍历资源路径列表，加载资源
        this.resourcesToLoad.forEach((path) => {
            console.log(`开始加载资源: ${path}`);
            assetManager.loadAny({'path':'Images/ui/bar'}, SpriteFrame, (err, asset) => {
                if (err) {
                    console.error(`加载资源失败: ${path}`, err);
                } else {
                    console.log(`加载资源成功: ${path}`);
                    this.onResourceLoaded(asset);
                }
            });
        });
    }

    // 单个资源加载完成
    private onResourceLoaded(asset: any) {
        if (!asset) {
            console.error('加载的资源为空');
            return;
        }

        // 根据资源类型进行类型断言
        if (asset instanceof Prefab) {
            console.log('加载的资源是预制体:', asset);
        } else if (asset instanceof SpriteFrame) {
            console.log('加载的资源是纹理:', asset);
        } else if (asset instanceof AudioClip) {
            console.log('加载的资源是音频:', asset);
        } else {
            console.log('加载的资源是未知类型:', asset);
        }

        this.loadedResources++;
        this.updateProgress();

        // 如果所有资源加载完成
        if (this.loadedResources >= this.totalResources) {
            this.onLoadingComplete();
        }
    }

    // 更新加载进度
    private updateProgress() {
        const progress = this.loadedResources / this.totalResources;

        // 更新进度条
        if (this.progressBar) {
            this.progressBar.progress = progress;
        }

        // 更新加载百分比文本
        if (this.progressLabel) {
            this.progressLabel.string = `${Math.floor(progress * 100)}%`;
        }
    }

    // 加载完成
    private onLoadingComplete() {
        console.log('所有资源加载完成');
        // 这里可以触发加载完成后的逻辑，例如跳转到游戏场景
    }
}